Release 10.1A: OpenEdge Data Management:
Database Administration
Resolving limbo transactions
Before you can resolve a limbo transaction, you must determine the transaction numbers, which database is the coordinator, whether the limbo transaction occurred in the coordinator database, and if the database in which the limbo transaction occurred is in use or shut down. How you resolve limbo transactions depends on whether the database is in use. If a server is running against the database, use PROMON. If no server is running, use PROUTIL.
![]()
To resolve a limbo transaction with PROMON:
- Determine whether one or more limbo transactions occurred against a database by starting the PROMON database monitor. Enter the following command:
When you enter the PROMON utility, the main menu appears:
- Choose option T (2PC Transaction Control). PROMON displays a screen similar to this:
- Choose 1. (Display all entries). PROMON displays a screen similar to this:
Note: If you run PROMON against a database where no limbo transaction has occurred, PROMON does not display any field information on the Transaction Control screen.
![]()
Take note of any limbo transactions. For example:
![]()
A transaction is in limbo if yes is displayed in the Limbo field. For each limbo transaction, write down the following information:
- The user number, shown in the Usr field.
- The name of the coordinator database, shown in the Coord field.
- The transaction number of the transaction in the coordinator database, shown in the Crd-task field.
You need this information to resolve the limbo transaction.
To resolve limbo transactions, you must consult the coordinator database of each transaction to see if the coordinator committed the transaction. If the coordinator database committed the transaction, you must also commit the transaction on the database where the limbo transaction occurred. If the coordinator did not commit the transaction, you must terminate the transaction on the database where the limbo transaction occurred.
- For each limbo transaction, run PROMON against the coordinator database to determine whether the coordinator committed the transaction.
- From the PROMON main menu, choose C (2PC Coordinator Information). PROMON displays a screen similar to this:
Note: If the coordinator database is shut down and you cannot run PROMON against it, you must use the 2PHASE COMMIT qualifier of PROUTIL to determine whether it committed the transaction.
Note: To commit transactions on a database that is shut down, you must use the 2PHASE RECOVER qualifier of PROUTIL.- Enter the transaction number that you recorded from the Crd-task field in Step 3, and press RETURN. PROMON displays a message that tells you whether the transaction committed.
- Run PROMON against the database where the limbo transaction occurred to commit or abort each limbo transaction.
- From the PROMON main menu, choose L (Resolve 2PC Limbo Transactions). This menu appears:
- To commit the transaction, choose 2 (Commit a Limbo Transaction). PROMON prompts you to enter the user number you recorded in Step 3, then press RETURN. PROMON displays a message similar to this:
To abort the transaction, choose 1 (Abort a Limbo Transaction). PROMON prompts you to enter the user number of the transaction you want to abort. Enter the user number, then press RETURN.
Repeat Step 4 through Step 9 for all the limbo transactions. After you commit or abort all of the limbo transactions, they are resolved.
![]()
To resolve limbo transactions using PROUTIL:
- Try to start a database session with PROSERVE, PRO, or PROUTIL. If limbo transactions occurred, the session fails to start and output similar to the following is displayed, or written to the event log file for the database. If the session starts successfully against a database, no limbo transactions have occurred on the database:
![]()
For all the listed limbo transactions, capture the following information:
- The transaction number on the current database (that is, the database where you tried to start the session).
- The name of the coordinator database.
- The transaction number in the coordinator database.
Once you have this information, you must consult the coordinator database to determine whether it committed or aborted the transaction.
- Enter the following command against the coordinator database to determine if the coordinator committed or aborted the limbo transaction:
where
db-namespecifies the coordinator database, andtr-numberspecifies the number of the transaction to check. Specify the number of the transaction on the coordinator database.If the coordinator committed the transaction, PROUTIL displays a message similar to this:
If the coordinator database committed the transaction, you must also commit the transaction on the database where the limbo transaction occurred. If the coordinator did not commit the transaction, you must abort the transaction on the database where the limbo transaction occurred.
- Commit or abort the limbo transactions, depending on whether the coordinator committed or aborted the transaction in Step 2.
Use the PROUTIL 2PHASE RECOVER utility to commit or abort transactions for a database. Before you enter this command, determine whether you will commit or abort each transaction; you must either commit or abort all limbo transactions to complete this command:
When you run this command against a database with limbo transactions, PROUTIL displays a message similar to this:
If you respond yes, PROUTIL commits the transaction. If you respond no, PROUTIL aborts the transaction.
PROUTIL displays this message for all of the limbo transactions that exist in the database.
After you commit or abort all of the limbo transactions, they are resolved.
|
Copyright © 2005 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095 |